
package com.lagou.task1;

        import java.util.HashMap;
        import java.util.Map;
/**
 * 查找唯一数,如果数组中的数都是唯一的就输出yes，否则输出no
 *
 * 分析：
 * 我们先用常规方法解决：
 * 遍历数组是O(n)，每个数遍历一次是O(n)，所以总的时间复杂度是
 * 约束时间复杂度为 O(n)，不符合要求。
 * 给定一个数组array，没有说有序，所以也不能使用二分法解决
 * 根据题目来看，你可以理解这是一个数据去重的问题。
 * 每轮迭代需要去判断当前元素在先前已经扫描过的区间内是否出现过，这就是一个查找的动作
 * 在优化数值特性的查找时，我们应该想到哈希表。因为它能在 O(1) 的时间内完成查找动作。这样，整
 * 体的时间复杂度就可以被降低为 O(n) 了。与此同时，空间复杂度也提高到了 O(n)。
 */
public class UniqNum {
    public static boolean isUnique(int[] array) {
        /*
        借助HashMap的key唯一性，也可以自己实现hash函数
        */
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < array.length; i++) {
            if (map.containsKey(array[i])) {
                return false;
            }
            //将array设置到key中，value任意
            map.put(array[i], 1);
        }
        return true;
    }

    public static void main(String[] args) {
        int[] array = {1, 2, 3};
        if (isUnique(array)) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
}
